import type { EnumDto } from '@/api/types'
import type { OptionDto } from '@/components/low-code/types'

/**
 * getKeyToEnum(UserLevelEnum, [1, 2])
 * @param data 原始枚举/对象
 * @param arr 需要转为label、value的枚举值，若未传则返回全部
 * @returns {label: string, value: string | number}[]
 */
export function getKeyToEnum(data: { [key: string | number]: string | number }, hasAll?: boolean, arr?: (number | string)[]) {
    const keys = Object.keys(data) as (number | string)[]
    let res = [] as OptionDto[]
    if (!arr) {
        res = Object.keys(data).filter(item => isNaN(Number(item))).map(item => ({
            label: item,
            value: data[item]
        }))
    } else {
        res = arr.filter(item => {
            return keys.includes(item)
        }).map(item => ({
            label: item,
            value: data[item]
        })) as OptionDto[]
    }
    if (hasAll) {
        res.unshift({
            label: '全部',
            value: ''
        })
    }
    return res
}

// 将key value 对象数组 转换为 键值对对象
export function getKeyValueToObject(data: EnumDto[]): { [key: string | number]: string | number } {
    const obj = {} as { [key: string | number]: string | number }
    data.forEach(item => {
        obj[item.value] = item.label
    })
    return obj
}

// 命名规范
export enum CommonNameEnum {
    INSURANCE = '保险',
    INSURANCE_DAILY = '日日保',
    INSURANCE_PERIOD = '长期保',
    INSURANCE_GROUP = '团意日保',
    ELESIGN = '电子签',
    PAYWAGE = '子弹发薪',
}

// 客户审核状态
export enum CompanyAuditStatusCnEnum {
    待审核 = 0,
    启用 = 1,
    驳回 = 2,
    禁用 = 3,
    解散 = 4
}

export enum CompanyAuditStatusEnum {
    PENDDING = 0,
    APPROVED = 1,
    REJECTED = 2
}

// 产品类型
export enum ProductTypeCnEnum {
    子弹发薪 = 0,
    日日保 = 2,
    长期保 = 3,
    团意日保 = 6,
    电子签 = 1,
    群发消息 = 7
}
export enum ProductTypeEnum {
    PAYWAGE = 0, // 子弹发薪
    PERIOD = 3, // 长期保
    DALIY = 2,  // 日日保
    GROUP = 6,   // 团意日保
    ELESIGN = 1, // 电子签
    GROUP_MESSAGE = 7, // 团意日保
}

// 余额状态
export enum BalanceTypeCnEnum {
    全部 = 0,
    有余额 = 1,
    余额为零 = 2
}

/** 设备类型 */
export enum DeviceEnum {
    Mobile,
    Desktop
}

// 角色
export enum RoleCnEnum {
    普通成员 = 0,
    管理员 = 1,
    超级管理员 = 2
}

export enum AccountTypeCnEnum {
    充值 = 1,
    投保 = 0,
    提现 = 3,
    余额转出 = 4,
    余额转入 = 5,
    转账 = 6
}

// 充值方式
export enum PayModeCnEnum {
    公对公 = 1,
    私对公 = 3,
    赠送 = 4,
    扫码 = 2 // 微信付款
}
export enum PayModeEnum {
    B2B = 1,
    P2B = 3,
    GIFT = 4,
    SCAN_CODE = 2
}

export enum OpenAccountTypeCnEnum {
    微信商户账户 = 1,
    企业支付宝账户 = 2
}

export enum OpenAccountTypeEnum {
    WECHAT = 1,
    ALIPAY = 2
}

// 子弹发薪销售场景（非赠送状态）
export enum SaleSceneCnEnum {
    首签 = 0,
    续签 = 1,
    席位购买 = 2,
    '续费+席位购买' = 3,
    '首签+席位购买' = 4
}
export enum SaleSceneEnum {
    FIRST_SIGN = 0,
    EXTEND_SIGN = 1,
    SEAT = 2,
    EXTEND_AND_SEAT = 3,
    FITST_AND_SEAT = 4
}
// 子弹发薪销售场景（赠送状态）
export enum SaleSceneGiftCnEnum {
    产品 = 1,
    席位 = 2,
    '产品+席位' = 3,
}
export enum SaleSceneGiftEnum {
    PRODUCT = 1,
    SEAT = 2,
    PRODUCT_AND_SEAT = 3,
}

// 长期保方案状态
export enum InsurancePerioPlanValidStatusCnEnum {
    未失效 = 0,
    已失效 = 1
}

export enum AllowStatusCnEnum {
    是 = 1,
    否 = 0
}

// 加减保操作类型
export enum OperationTypeCnEnum {
    加保 = 0,
    减保 = 1,
    撤销 = 2,
}

// 保险方案类型
export enum PlanTypeCnEnum {
    微保 = 1,
    日日保 = 2,
    雇主险 = 3,
    月保单 = 4,
    即时生效 = 5
}

// 保单状态
export enum PolicyStatusCnEnum {
    待生效 = 0,
    在保 = 1,
    已失效 = 2
}

// 长期保审核状态
export enum InsurancePeriodStatusCnEnum {
    待审核 = 0,
    已通过 = 1,
    已驳回 = 2,
    已拒保 = 3,
}

// 日日保审核状态
export enum InsuranceDailyStatusCnEnum {
    未提交审核 = 0,
    已通过 = 1,
    已驳回 = 2,
    待审核 = 3
}

export enum LevelCnEnum {
    '1类' = 1,
    '2类' = 2,
    '3类' = 3,
    '4类' = 4,
    '5类' = 5
}

// 月单模式
export enum MonthModeCnEnum {
    灵活 = 0,
    月单 = 1,
    即时 = 2
}

// 日日保账户冻结状态
export enum InsuranceDailyBlockedAccountCnEnum {
    未冻结 = 0,
    冻结 = 1,
    '30天未投保自动冻结' = 2
}

// 保单状态
export enum InsuranceOrderStatusCnEnum {
    未投保 = 0,
    出单中 = 1,
    待生效 = 2,
    保障中 = 3,
    已失效 = 4,
    投保失败 = 5,
    取消 = 6,
    过期 = 7
}

// 保险审批状态
export enum InsuranceAuditStatusCnEnum {
    已通过 = 1,
    已驳回 = 2,
    待审批 = 3,
}

// 团意险开通状态
export enum InsuranceGroupOpenStatusCnEnum {
    未维护保司 = 0,
    开通 = 1,
    未提交保司审核 = 2,
    已提交保司审核 = 3,
    保司审核通过 = 4,
    保司审核失败 = 5,
    停用 = 9
}

// 电子签签署状态
export enum ElesignFlowStatusCnEnum {
    待签署 = 'INIT',
    已签署 = 'ALL',
    流签 = 'DEADLINE',
    拒签 = 'REJECT',
    撤销 = 'CANCEL'
}
export enum ElesignFlowStatusEnum {
    INIT = '待签署',
    ALL = '已签署',
    DEADLINE = '流签',
    REJECT = '拒签',
    CANCEL = '撤销'
}

// 电子签操作类型
export enum ElesignOperatorTypeCnEnum {
    消费 = 0,
    充值 = 1
}


// 保险理赔状态 
export enum InsuranceIndemnifyEnum {
    待处理 = 0,
    处理中 = 1,
    已结案 = 2,
    已驳回 = 3,
    已撤销 = 4,
    已确认金额 = 5,
    保险垫付 = 6
}
// 充值审核状态
export enum RechargeCheckStatusCnEnum {
    待审核 = 0,
    已通过 = 1,
    已驳回 = 2
}

export enum InsuranceReprotCaseStatusCnEnum {
    待处理 = 0,
    处理中 = 1,
    已结案 = 2,
    已驳回 = 3,
    已撤销 = 4
}

// 子弹发薪充值类型
export enum PaywageRechargeTypeCnEnum {
    首签 = 0,
    续费 = 1
}

// 发票上传状态
export enum InvoiceUploadStatusCnEnum {
    未上传 = 1,
    已上传 = 2
}

// 发票类型
export enum InvoiceTypeCnEnum {
    日日保 = 0,
    长期保 = 3,
    电子签 = 2,
    发薪专户 = 4
}

// 发票核对状态
export enum InvoiceCheckStatusCnEnum {
    正常 = 0,
    异常 = 1,
    待核对 = 2,
}

// 日日保状态 INSURANCE_DAILY

export enum InvoiceDailyStatusEnum {
    团意险 = 'insure_type_tyrb',
    日日保 = 'insure_type_rrb',
}
// 发票来源
export enum InvoiceFromCnEnum {
    自开票 = 1,
    保司票 = 2
}

// 部门类型
export enum DepartmentTypeCnEnum {
    商务 = 1,
    其他 = 2
}


export enum SexCnEnum {
    男 = 0,
    女 = 1
}

// 员工在职状态
export enum JobStatusCnEnum {
    在职 = 0,
    离职 = 1
}

export enum GenderCnEnum {
    男 = '0',
    女 = '1'
}

// 是否参加
export enum JoinCnEnum {
    参加 = 0,
    不参加 = 1
}

// 是否可见
export enum VisibleCnEnum {
    可见 = 0,
    不可见 = 1
}

// 员工提成里的产品类型
export enum RateProductTypeCnEnum {
    子弹发薪 = 0,
    电子签 = 1,
    日日保 = 2,
    长期保 = 3,
    发薪续费提成 = 4,
    微保 = 5
}

// 变更记录类型
export enum WorkChangeTypeCnEnum {
    新增 = 0,
    划出 = 1,
    离职 = 2
}

// 平台类型
export enum PlatformTypeCnEnum {
    sass运营平台 = 0,
    客户pc = 1,
    新运营平台 = 2
}

// 部门类型
export enum DeptTypeCnEnum {
    商务 = 1,
    其他 = 2
}

// 员工在离职状态
export enum StaffInWorkStatusCnEnum {
    在职 = 1,
    离职 = 2,
}

// 领薪状态
export enum SalaryStatusCnEnum {
    待领薪 = 0,
    已领薪 = 1,
    停止发薪 = 2,
    进行中 = 3,
    领薪失败 = 4,
}

// 规则限制状态
export enum RuleLimitCnEnum {
    不限 = -1,
    限制 = 1,
}

// 小程序角色类型
export enum MiniProgramAdminTypeCnEnum {
    普通成员 = 0,
    管理员 = 1,
    超管 = 2,
}


export enum RemoveFromTeamTypeCnEnum {
    移出团队 = 0,
    注销账号 = 1,
}

// 保司生效规则方案类型
export enum ValidRuleTypeCnEnum {
    次日生效 = 1,
    整点生效 = 2,
}

// 保司扣费规则方案类型
export enum FeeDeductionRuleTypeCnEnum {
    灵活方案 = 1,
    月单 = 2,
}

// 字典管理的状态
export enum DictionaryStatusCnEnum {
    正常 = 0,
    停用 = 1,
}
// 保险产品
export enum InsuranceTypeEnum { 
	日日保 = 1,
	长期保 = 2,
	团意保 = 3
}

// 渠道来源 
export enum ChannelSourceEnum { 
	系统保司 = 0,
	渠道保司 = 1
}

// 保险数据对接方式
export enum InsuranceInvokeTypeEnum { 
	邮件 = 1,
	Api = 2,
    // '邮件、API' = '1,2'
}

// 发薪销售场景
export enum PaywageSaleScenarioCnEnum {
    首签 = 0,
    续签 = 1,
}
// 发薪方式
export enum PayAccountFlagCnEnum {
    微信 = 10001,
    支付宝 = 10002,
}

// 发薪状态
export enum PayStateCnEnum {
    进行中 = 0,
    已通过 = 1,
    已驳回 = 2,
    已取消 = 3
}


// 客户帐户信息状态
export enum AccountStateCnEnum {
    待审核 = 0,
    已审核 = 1,
    已驳回 = 2,
    已提现 = 3,
    已转出 = 4,
    已转入 = 5
}

// 菜单状态
export enum MenuStatusCnEnum {
    正常 = 0,
    停用 = 1
}

export enum PlatformCnEnum {
    管理后台 = 0,
    客户PC = 1,
    新运营端 = 2
}

//设置按钮权限的类型
export enum ButtonMenuTypeCnEnum {
    列表前操作 = 'tableOpeFront',
    列表后操作 = 'tableOpeBack',
    顶部左 = 'top-left',
    顶部右 = 'top-right',
    标签页 = 'tab',
    手动鉴权 = 'none'
}

// 审批管理新客户审核状态
export enum ApprovalClientStatusCnEnum {
    待审核 = 0,
    已通过 = 1,
    已驳回 = 2,
}

// 长期保报案理赔状态
export enum ClaimPeriodStatusCnEnum {
    待处理 = 0,
    处理中 = 1,
    已结案 = 2,
    已驳回 = 3,
    已撤销 = 4,
    已确认金额 = 5,
    保险垫付 = 6
}

// 事故类型
export enum AccidentTypeCnEnum {
    意外 = 1,
    工伤 = 2,
}

// 伤情是否严重
export enum HurtStatusCnEnum {
    否 = 0,
    是 = 1,
}

// 材料状态
export enum MaterialStatusCnEnum {
    未上传 = 0,
    已上传 = 1,
}

// 收款账户明细审核状态
export enum CollectionAccountStatusCnEnum {
    待审核 = 0,
    已通过 = 1,
    已驳回 = 2,
}

// 收款账户明细类型
export enum CollectionAccountTypeCnEnum {
    充值 = 0,
    转账 = 1,
    提现 = 2,
}

// 发票来源
export enum InvoiceFromTypeCnEnum {
    自开票 = 1,
    保司票 = 2
}


// 收款账户渠道类型，目前只需要用系统渠道
export enum ChannelTypeCnEnum {
    普通渠道 = 0,
    系统渠道 = 1
}

// 保司规则产品类型
export enum InsureTypeCnEnum {
    日结保 = 1,
    长期保 = 2,
    团意险 = 3
}

// 出险规则类型
export enum DangerRuleCnEnum {
    不限制 = -1,
    次月 = 1,
    理赔结束 = 2,
}

// 生效规则人数限制
export enum ValidPeopleLimitRuleCnEnum {
    普通 = 1,
}

// 替换规则是否允许替换员工
export enum ReplaceRuleAllowTypeCnEnum {
    允许 = 1,
    不允许 = 2,
}

// 替换规则替换方法
export enum ReplaceRuleMethodCnEnum {
    风险等级相同 = 1,
    保费相同 = 2,
    风险等级或保费相同 = 3
}

// 查重规则
export enum RepeatRuleCnEnum {
    保司之间查重 = 1,
    保司查重 = 2,
    // 渠道系统查重 = 3,
}

// 区域限制规则
export enum AreaRuleLimitCnEnum {
    不限 = -1,
    允许投保区域 = 1,
    禁止投保区域 = 2,
}

// 邮件推送excel规则
export enum ExcelRuleCnEnum {
    单个表单 = 1,
    sheet区分 = 2,
    分开发送 = 3,
    标准 = 4
}

// 工种风险等级
export enum OccupationLevelCnEnum  {
    '1-3类' = 3,
    '4类' = 4,
    '5类' = 5,
    '6类' = 6,
}

// 最新申请工种审核状态
export enum OccupationStatusCnEnum {
    待审核 = 0,
    已通过 = 1,
    已驳回 = 2,
    已撤销 = 3
}

// 工种审核类型
export enum OccupationQueryTypeCnEnum {
    审核列表 = 1,
    历史列表 = 2
}

// 工种记录的类型
export enum OccupationRecordTypeCnEnum {
    工种审核 = 1,
    工种补充 = 2
}

// 长期保派遣单位拉黑是否保留出险人员
export enum RetainReportCaseUserCnEnum {
    不保留 = 0,
    保留 = 1
}

// 长期保派遣单位状态
export enum InsurePeriodServeCompanyStatusCnEnum {
    黑名单 = 0,
    启用 = 1,
}

// 规则中心推送规则是否配置客户清单
export enum IsSetUserDetailConfigTypeCnEnum {
    不配置 = 1,
    配置 = 2
}

// 保单类型
export enum InsurePlanTypeCnEnum {
    灵活保单 = 0,
    月单 = 1
}

// 保费计算了类型
export enum CalculateDayTypeCnEnum {
    自然月 = 1,
    天数 = 2
}

// 计费方式
export enum CalculateFeeTypeCnEnum {
    向上取整 = 1,
    向下取整 = 2,
    四舍五入 = 3
}

// 投保方案状态
export enum InsureEnsureStatusCnEnum {
    待生效 = 0,
    启用 = 1,
    禁用 = 2
}

// 保费记录状态
export enum InsureEnsureRecordStatusCnEnum {
    待生效 = 0,
    生效中 = 1,
    已过期 = 2
}

// 工种审核状态
export enum OccupationAuditStatusCnEnum {
    待审核 = 0,
    审核通过 = 1,
    审核驳回 = 2,
}

// 工种审核日日保和团意险产品类型
export enum DailyProductTypeCnEnum {
    日日保 = 0,
    团意险 = 1
}

// 开通方案的状态
export enum OpenEnsureStatusCnEnum {
    黑名单 = 0,
    启用 = 1
}

// 日日保账户冻结状态
export enum DailyblockedAccountCnEnum {
    未冻结 = 0,
    冻结 = 1,
    '30天未投保自动冻结' = 2
}

// 团意险账户开通状态
export enum InsureGroupStatusCnEnum {
    未开通 = 0,
    已开通 = 1,
    未提交保司审核 = 2,
    已提交保司成功 = 3,
    保司审核通过 = 4,
    保司审核失败 = 5,
    停用 = 9
}

// 日日保团意日保对应保司类型的字段
export enum DailyGroupInsureCompanyType {
    daily = 'insure002_gsc',
    group = 'insure_type_tyrb'
}